package app.com.business.service.impl;

import java.util.ArrayList;



import java.util.List;


import app.com.business.bo.AffectationDepartement;
import app.com.business.bo.AffectationGeneralDepartement;
import app.com.business.bo.Etat;
import app.com.business.bo.Fournisseur;
import app.com.business.bo.Materiel;
import app.com.business.bo.Prof;
import app.com.business.bo.Salle;
import app.com.business.dao.AffectationDao;
import app.com.business.dao.AffectationGeneralDepartementDao;
import app.com.business.dao.EtatDao;
import app.com.business.dao.FournisseurDao;
import app.com.business.dao.MaterielDao;
import app.com.business.dao.ProfDao;
import app.com.business.dao.SalleDao;
import app.com.business.exceptions.MaterielException;
import app.com.business.service.GestionMateriel;

/**
 * @author mohssine
 * 
 */
public class GestionMaterielImpl implements GestionMateriel {

	private MaterielDao materielDao;
	private EtatDao etatDao;
	private FournisseurDao fournisseurDao;
	private AffectationDao affectationDao;
	private AffectationGeneralDepartementDao affectationGeneralDao;
	private SalleDao salleDao;
	private ProfDao profDao;

	public void ajouterMateriel(Materiel materiel) {
		materielDao.create(materiel);
	}

	public Materiel getMaterielByCodeBarres(String codeBarres) throws MaterielException{
		return materielDao.getMaterielCodeBarres(codeBarres);
	}


	public List<Materiel> getAllMateriels() {
		return materielDao.getAll();
	}

	public List<Materiel> rechercherByCodeBarres(String codeBarres) throws MaterielException{
		List<Materiel> listMat = new ArrayList<Materiel>();
		listMat.add(materielDao.getMaterielCodeBarres(codeBarres));
		return listMat;
	}

	public List<Materiel> rechercherByNumInventaire(String numInventaire)throws MaterielException {
		List<Materiel> listMat = new ArrayList<Materiel>();
		listMat.add(materielDao.getMaterielByNumInventaire(numInventaire));
		return listMat;
	}
	

	public List<Materiel> rechercherByAffectation(Long idAffectationGeneral) throws MaterielException {
		return materielDao.getAllByIdAffectation(idAffectationGeneral);
		
	}

	public EtatDao getEtatDao() {
		return etatDao;
	}

	public void setEtatDao(EtatDao etatDao) {
		this.etatDao = etatDao;
	}

	public FournisseurDao getFournisseurDao() {
		return fournisseurDao;
	}

	public void setFournisseurDao(FournisseurDao fournisseurDao) {
		this.fournisseurDao = fournisseurDao;
	}

	public SalleDao getSalleDao() {
		return salleDao;
	}

	public void setSalleDao(SalleDao salleDao) {
		this.salleDao = salleDao;
	}

	public ProfDao getProfDao() {
		return profDao;
	}

	public void setProfDao(ProfDao profDao) {
		this.profDao = profDao;
	}

	public void ajouterFournisseur(Fournisseur fournisseur) {
		fournisseurDao.create(fournisseur);

	}

	public void ajouterEtat(Etat etat) {
		etatDao.create(etat);

	}

	public void ajouterAffectationGeneralDepartement(
			AffectationGeneralDepartement affectation) {
		affectationGeneralDao.create(affectation);

	}

	public AffectationDao getAffectationDao() {
		return affectationDao;
	}

	public void setAffectationDao(AffectationDao affectationDao) {
		this.affectationDao = affectationDao;
	}

	public void supprimerMateriel(String codeBarres) throws MaterielException {
		materielDao.deleteByCodeBarres(codeBarres);

	}

	public void ajouterSalle(Salle salle) {
		salleDao.create(salle);

	}

	public void ajouterProf(Prof prof) {
		profDao.create(prof);

	}

	public List<AffectationDepartement> getAllAffectations() {
		return affectationDao.getAll();
	}

	public List<Salle> getAllSalles() {
		return salleDao.getAllDistinct();
	}

	public List<Prof> getAllProfs() {
		return profDao.getAll();
	}

	public List<Fournisseur> getAllFournisseurs(){
		return fournisseurDao.getTousLesFournisseurs();
	}

	public List<Etat> getAllEtats() {
		return etatDao.getAllDistinct();
	}

	public AffectationGeneralDepartementDao getAffectationGeneralDao() {
		return affectationGeneralDao;
	}

	public void setAffectationGeneralDao(
			AffectationGeneralDepartementDao affectationGeneralDao) {
		this.affectationGeneralDao = affectationGeneralDao;
	}

	public Etat getEtatByType(String typeEtat) throws MaterielException{

		return etatDao.getEtatByType(typeEtat);
	}

	public Fournisseur getFournisseurByLibelle(String fournisseurSelectionnee) throws MaterielException{
		return fournisseurDao.getFournisseurByLibelle(fournisseurSelectionnee);
	}

	public AffectationDepartement getAffectationByCodeAffectation (
			String affectationSelectionnee) throws MaterielException{
		return affectationDao
				.getAffectationByCodeAffectation(affectationSelectionnee);
	}

	public Salle getSalleByCodeSalle(String salleSelectionnee) throws MaterielException{
		return salleDao.getSalleByCodeSalle(salleSelectionnee);
	}

	public Prof getProfByCodeProf(String profSelectionnee) throws MaterielException{
		return profDao.getProfByCodeProf(profSelectionnee);
	}

	public AffectationGeneralDepartement updateAffectation() throws MaterielException{
		 List affectations = affectationGeneralDao.getAll();
		 if(affectations == null | affectations.size() == 0 | affectations.get(0)== null){
			 throw new MaterielException();
		 }
		 return (AffectationGeneralDepartement)affectations.get(0);
		
	}


	public AffectationGeneralDepartement getIdAffectation(
			AffectationGeneralDepartement affectationGeneral) throws MaterielException{
		
		return affectationGeneralDao.getIdAffectation(affectationGeneral);
	}

	public MaterielDao getMaterielDao() {
		return materielDao;
	}

	public void setMaterielDao(MaterielDao materielDao) {
		this.materielDao = materielDao;
	}

}
